<?php 
      /*
       * Ueberpruefing der Passwortstaerke
       */
      class FormValidation_PasswordStrength extends Zend_Validate_Abstract
      {
          const LENGTH   = 'length';
          const UPPER    = 'upper';
          const LOWER    = 'lower';
          const DIGIT    = 'digit';
          const SPECIAL  = 'special';
          const INVALID  = 'invalid';

          protected $_messageTemplates = array(
              self::LENGTH   => "Das Passwort muss mindestens 8 Zeichen lang sein.",
              self::UPPER    => "Das Passwort muss mindestens einen Großbuchstaben enthalten.",
              self::LOWER    => "Das Passwort muss mindestens einen Kleinbuchstaben enthalten.",
              self::DIGIT    => "Das Passwort muss mindestens eine Ziffer enthalten.",
              self::SPECIAL  => "Das Passwort muss mindestens ein Sonderzeichen enthalten.",
              self::INVALID  => "Das Passwort darf nicht einer E-Mail-Adresse entsprechen."
              );
       
          public function isValid($value)
          {
              $this->_setValue($value);
              
              if (strlen($value) < 8) {
                  $this->_error(self::LENGTH);
                  return false; // Weitere Pruefing verhindern
              }
              
              if(filter_var($value, FILTER_VALIDATE_EMAIL)) {
                  $this->_error(self::INVALID);
                  return false; // Weitere Pruefing verhindern
              }
       
              if (!preg_match('/[A-Z]/', $value)) {
                  $this->_error(self::UPPER);
                  return false; // Weitere Pruefing verhindern
              }
       
              if (!preg_match('/[a-z]/', $value)) {
                  $this->_error(self::LOWER);
                  return false; // Weitere Pruefing verhindern
              }
       
              if (!preg_match('/\d/', $value)) {
                   $this->_error(self::DIGIT);
                    return false; // Weitere Pruefing verhindern
              }

              if(!preg_match('/\W/', $value)){
                  $this->_error(self::SPECIAL);
                  return false;
              }
       
              return true;
          }
      }